package com.yuanchu.goods.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.common.utils.PageUtils;
import com.yuanchu.goods.dto.*;
import com.yuanchu.goods.entity.YoshopGoodsEntity;
import com.yuanchu.goods.entity.YoshopGoodsImageEntity;

import java.util.List;

/**
 * 商品记录表
 *
 * @author adan
 * @email 2028038953@gmail.com
 * @date 2023-12-19 02:17:43
 */
public interface YoshopGoodsService extends IService<YoshopGoodsEntity> {

    /*
     * 查询商品列表
     * @param params 查询参数
     * @return
     */
    PageUtils queryGoodsList(QueryGoodsParamsDto params);
    List<YoshopGoodsEntity> queryGoodsALl(QueryGoodsParamsDto params);
    /**
     * 保存商品信息
     * @param goodsParams 商品参数
     */
    void saveGoodsInfo(AddGoodsParamsDto goodsParams, int storeId);

    /**
     * 保存商品信息到数据库
     *
     * @param goodsParams 商品参数
     * @param goodsId
     * @return
     */
    Integer saveGoodsToDb(AddGoodsParamsDto goodsParams, String goodsId,  int storeId);

    /**
     * 保存商品规格
     * @param goodsParams
     * @param goodsId
     * @param storeId
     */
    void saveGoodsToSpec(AddGoodsParamsDto goodsParams, Integer goodsId, int storeId);

    /**
     * 保存商品sku
     * @param goodsParams
     * @param goodsId
     * @param storeId
     */
    void saveGoodsToSku(AddGoodsParamsDto goodsParams, Integer goodsId, int storeId);

    /**
     * 保存商品分类
     * @param categoryIds 分类id集合
     * @param goodsId 商品id
     * @param storeId 店铺id
     */
    void saveGoodsToCategory(List<Integer> categoryIds, Integer goodsId, int storeId);

    /**
     * 保存商品图片
     * @param imagesIds 图片id集合
     * @param goodsId 商品id
     * @param storeId 店铺id
     */
    void saveGoodsToImage(List<Integer> imagesIds, Integer goodsId, int storeId);

    /**
     * 保存商品服务
     * @param serviceIds 服务id集合
     * @param goodsId 商品id
     * @param storeId 店铺id
     */
    void saveGoodsToService(List<Integer> serviceIds, Integer goodsId, int storeId);

    /**
     * 根据商品id查询商品详情
     * @param goodsId 商品id
     * @return
     */
    QueryGoodsDetail queryGoodsDetailById(Integer goodsId);

    /**
     * 修改商品信息
     * @param editGoodsParams 商品参数
     */
    void editById(EditGoodsParamsDto editGoodsParams, int storeId);
    /**
     * 修改商品规格
     * @param editGoodsParams
     * @param goodsId
     * @param storeId
     */
    void editGoodsToSpec(EditGoodsParamsDto editGoodsParams, String goodsId, int storeId);
    /**
     * 修改商品sku
     * @param form
     * @param goodsId
     * @param storeId
     */
    void editGoodsToSku(AddGoodsParamsDto form, String goodsId, int storeId);
    /**
     * 修改商品分类
     * @param categoryIds
     * @param goodsId
     * @param storeId
     */
    void editGoodsToCategory(List<Integer> categoryIds, String goodsId, int storeId);

    /**
     * 修改商品图片
     * @param imagesIds
     * @param goodsId
     * @param storeId
     */
    void editGoodsToImage(List<Integer> imagesIds, String goodsId, int storeId);

    /**
     * 修改商品服务
     * @param serviceIds
     * @param goodsId
     * @param storeId
     */
    void editGoodsToService(List<Integer> serviceIds, String goodsId, int storeId);

    /**
     * 批量删除商品
     * @param goodsIds
     * @return
     */
    boolean removeGoodsByIds(List<Integer> goodsIds);

    void updateGoodsState(EditGoodsStateDto params);

    Integer queryTotalGoods();

    long querySoldOutGoodsTotal();

    /**
     * 根据文件id查询商品
     * @param fileIds
     * @return
     */
    boolean getGoodsByFileIds(List<Long> fileIds);

    /**
     * 根据商品分类id查询商品
     * @param categoryId
     * @return
     */
    List<YoshopGoodsEntity> queryGoodsByCategoryId(Integer categoryId);

    /**
     * 根据商品id查询商品基本信息
     *
     * @param goodsId
     * @param goodsSkuId
     * @return
     */
    YoshopGoodsEntity queryGoodsInfo(Integer goodsId, String goodsSkuId);

    /**
     * 根据商品id查询 商店 商品详情
     * @param goodsId
     * @param userId
     * @return
     */
    QueryStoreGoodsDetail queryStoreGoodsDetailById(Integer goodsId, Integer userId);

    /**
     * 根据商品id查询商品图片
     * @param goodsId
     * @return
     */
    YoshopGoodsImageEntity queryGoodsImage(Integer goodsId);

    /**
     * 根据商品id查询商品库存信息
     * @param goodsId
     * @param goodsSkuId
     * @return
     */
    Integer queryGoodsStockNum(Integer goodsId, String goodsSkuId);

    /**
     * 查询商品销量
     * @return
     */

    List<YoshopGoodsEntity> querySaleGoodsList();

    /**
     * 查询商品列表详情
     * @param goodsId
     * @return
     */
    QueryGoodsList queryGoodsDto(int goodsId);
}

